/** @file $RCSfile: tbusd_send.h,v $
  Invoked function header file for tsf4g-tbus relay module
  $Id: tbusd_send.h,v 1.1.1.1 2013/05/27 02:58:11 ouyang Exp $
@author $Author: ouyang $
@date $Date: 2013/05/27 02:58:11 $
@version $Revision: 1.1.1.1 $
@note Editor: Vim 6.3, Gcc 4.0.2, tab=4
@note Platform: Linux
*/


#ifndef TBUSD_SEND_H
#define TBUSD_SEND_H

#include "tbusd.h"

/** 向各relay通道发送数据包
@param[in] a_pstRunEnv 服务器运行上下文环境
@param[out] a_iMaxSendPkg 最大可以发送数据包
@return 处理成功返回0, 否则返回非零值
*/
int tbusd_proc_send(IN LPRELAYENV a_pstRunEnv, IN int a_iMaxSendPkg);

/** 在relay通道上发送数据
  @param[in] a_pstRunEnv -- 服务器运行上下文环境
  @param[in] a_pstRelay relay通道数据结构指针
  @param[out] a_iMaxSendPkg 最大可以发送数据包

  @retval 0 -- success
  @retval !0 -- failed

  @note
*/
int tbusd_send_pkg(IN LPRELAYENV a_pstRunEnv, IN LPRELAY a_pstRelay, IN int a_iMaxSendPkg) ;


/**
  @brief 发送上次剩余没有发送出去的tbusd消息消息

  @param[in] a_pstConn -- relay 通道
  @param[in] a_pstChannel -- a_pstChannel information
  @param[in,out] a_pstRelayStat -- 统计数据记录数据结构

  @retval 0 -- success, no partial data remained or sent partial data successfully
  @retval !0 -- failed, sent partial data failed

  @note
*/
int tbusd_send_remain_data(IN LPCONNNODE a_pstConn,IN LPTBUSCHANNEL a_pstChannel, LPTBUSRELAYCONNSTAT a_pstRelayStat) ;




/**
  @brief 从通道中取出一个准备发送的tbus消息,但此消息仍保留在TBUSCHANNEL中
  @param[in] a_pstChannel -- TBUSCHANNEL information
  @param[in] a_pstConn -- relay 通道
  @param[in,out] a_pstRelayStat -- 统计数据记录数据结构

  @retval 0 -- success, get data ok
  @retval !0 -- failed

  @note
*/
int tbusd_send_one_pkg( IN const TBUSCHANNEL *a_pstChannel, IN LPCONNNODE a_pstConn, 
					   LPTBUSRELAYCONNSTAT a_pstRelayStat) ;


/**
@brief tbusd消息体已经发送出去,将发送数据的get指针移至下一个消息

@param[in] a_pstChannel -- TBUSCHANNEL information
@retval 0 -- success, stored ok
@retval !0 -- failed

@note
*/
int tbusd_adjust_sending_channel_pos(LPSENDDATAMNG a_pstSendMng,  IN const TBUSCHANNEL *a_pstChannel);


#endif /**< TBUSD_SEND_H */

